package com.uinnova.product.eam.service.impl;

import com.binary.core.util.BinaryUtils;
import com.uinnova.product.eam.comm.model.es.EamDiagramRelationSys;
import com.uinnova.product.eam.model.EamDiagramRelationSysCdt;
import com.uinnova.product.eam.service.EamDiagramRelationSysService;
import com.uinnova.project.db.eam.ESDiagramDao;
import com.uinnova.project.service.eam.DiagramCopyHandle;
import com.uinnova.project.service.eam.ESDiagramSvc;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

@Service
public class DiagramCopyHandleImpl implements DiagramCopyHandle {

    @Resource
    private EamDiagramRelationSysService eamDiagramRelationSysService;
    @Resource
    private ESDiagramSvc esDiagramSvc;

    @Resource
    private ESDiagramDao esDiagramDao;

    /**
     * 文件夹复制后处理
     *
     * @param sourceEnergyAndNewEnergy key:原视图加密Id value:新视图加密Id
     * @param sourceDirIdAndNewDirId   key: 原文件夹Id value:旧的文件夹Id
     * @param targetDirId              目标文件夹
     */
    @Override
    public void bindingAssetSystem(Map<String, String> sourceEnergyAndNewEnergy,
                                   Map<Long, Long> sourceDirIdAndNewDirId, Long targetDirId) {

        List<EamDiagramRelationSys> sourceDiagramRelationSys =
                eamDiagramRelationSysService.getEamDiagramRelationSys(sourceEnergyAndNewEnergy.keySet());

        eamDiagramRelationSysService.saveDiagramRelationSys(sourceDiagramRelationSys.stream().map(relation -> {
            String sourceEnergy = relation.getDiagramEnergy();
            Long sourceDirId = relation.getDirId();

            String newEnergy = sourceEnergyAndNewEnergy.get(sourceEnergy);
            Long newDirId;

            if (sourceDirId.equals(targetDirId)) {
                newDirId = sourceDirId;
            } else if (BinaryUtils.isEmpty(sourceDirIdAndNewDirId)) {
                newDirId = targetDirId;
            } else {
                newDirId = sourceDirIdAndNewDirId.get(sourceDirId);
            }

            EamDiagramRelationSysCdt cdt = new EamDiagramRelationSysCdt();
            cdt.setDirId(newDirId);
            cdt.setDiagramEnergy(newEnergy);
            cdt.setEsSysId(relation.getEsSysId());
            return cdt;
        }).collect(Collectors.toList()));
    }
}
